#include "HeaderFile.h"

uint16 ADCdata[5];
int err_L;//1~100
int ADC_col[2];

float ADCerror;

void InitADC(void)
{
    adc_init(ADC_IN11_C1);
    adc_init(ADC_IN12_C2);
    adc_init(ADC_IN13_C3);
    adc_init(ADC_IN14_C4);
    adc_init(ADC_IN15_C5);
}

 void GetadcData(void)
 {
     ADCdata[0] = adc_convert(ADC_IN11_C1, ADC_12BIT);
     ADCdata[1] = adc_convert(ADC_IN12_C2, ADC_12BIT);
     ADCdata[2] = adc_convert(ADC_IN13_C3, ADC_12BIT);
     ADCdata[3] = adc_convert(ADC_IN14_C4, ADC_12BIT);
     ADCdata[4] = adc_convert(ADC_IN15_C5, ADC_12BIT);
 }



/**********************************
 **函数名:Git_average_ADC
 **作用 :取5次ADC计算平均值(用户屏蔽)
 **输入:ADC通道数
 **返回值:ADC +-平均值
************************************/
unsigned int Git_average_ADC(char ADC_channel)//算力小，稳定好
{
	int temp =0,ret =0;
	int Max_value , Min_value;
	int i;
	
	Max_value= Min_value =adc_convert(ADC_channel,ADC_12BIT);
	ret =Max_value;
	
	for(i=1;i<10;i++){
			temp =adc_convert(ADC_channel,ADC_12BIT);
			if(temp>Max_value) Max_value = temp;
			else if(temp<Min_value) Min_value =temp;
			ret +=temp;	
	}
	ret = (ret -Max_value -Min_value)/8;
	return ret;
}

/**********************************
 **函数名:Git_ADC_inductance
 **作用 :获得可用ADC值至数组ADC_col
 **输入:
 **返回值:
************************************/
void Git_ADC_inductance()		
{	
		ADC_col[0]=Git_average_ADC(ADC_IN13_C3);		//左
		ADC_col[1]=Git_average_ADC(ADC_IN12_C2);		//右
}

/**********************************
 **函数名:ADC_Unify2
 **作用 :ADC数组值归一化 （0-100）
 **输入:电感可读最大值与电感可读最小值
 **返回值:
************************************/

void ADC_Unify2(int Midvalue)
{
		ADC_col[0] = (int)((long)(ADC_col[0]) *200 /  Midvalue);			//归值 0-200
		ADC_col[1] = (int)((long)(ADC_col[1]) *200 /  Midvalue);			//归值 0-200
		//归值 0-200
}

/**********************************
 **函数名:Git_5ADCchannel_err
 **作用 :获得综合偏差值
 **输入:
 **返回值:偏差值
************************************/
float Git_5ADCchannel_err()
{
    int err;
    err = 100.0f * (ADC_col[0] - ADC_col[1]) / (ADC_col[0] + ADC_col[1] +1); //归值-100 ~ 100
  	if(err >120) return 120;
  	if(err <-120) return -120;
    return err;
}

float ErrorOutADC()
{
    Git_ADC_inductance();
    ADC_Unify2(1000);
    ADCerror =Git_5ADCchannel_err();
    return ADCerror;
}
